home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / t_os / tool / helper / src / scrn.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-16  |  12.8 KB  |  403 lines

  1. /*
  2.  
  3. 01234567890123456789012345678901234567890123456789012345678901234567890123456789--------------------------------------------------------------------------------|                                                xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx| 条件くりあっ☆  見たいなぁ○  印刷しませう(^_^)  こぴっちゃお(^_^;  またねっ♪
  4.  もどろ~ねっ☆
  5. --------------------------------------------------------------------------------|                        お好みのメニュ-をどうぞ                              |                                   なにがいい?
  6. |xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx|--------------------------------------------------------------------------------|          作    品    名           ||         作    者    名        ||TMBD|--------------------------------------------------------------------------------|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||☆☆☆☆||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||☆☆☆☆|
  7. 0      1         2         3         4         5         6         7
  8. 01234567890123456789012345678901234567890123456789012345678901234567890123456789|               作    品    名                ||         作    者    名        |               た・い・と・る                           つくったひと☆
  9. --------------------------------------------------------------------------------|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|--------------------------------------------------------------------------------| 0123 プログラムがあるよ     | 前  項 | | 次  項 | 
  10.        作品あるよっ♪            まえ      うしろ
  11. --------------------------------------------------------------------------------
  12. *********************/
  13.  
  14. #include    <stdio.h>
  15. #include    <stdlib.h>
  16. #include    <stdarg.h>
  17. #include    <mos.h>
  18. #include    "keyword.h"
  19. #include    "graphic.h"
  20. #include    "scrn.h"
  21. #include    "coldef.h"
  22. #include    "bitmap.h"
  23.  
  24. #define    MSG_X        (38*8)
  25. #define    MSG_Y        4
  26. #define    MSG_X1        (MSG_X-4)
  27. #define    MSG_Y1        (MSG_Y-2)
  28. #define    MSG_X2        (MSG_X+41*8+3)
  29. #define    MSG_Y2        (MSG_Y+17)
  30.  
  31. #define CLER_X      (1*8)
  32. #define CLER_Y      26
  33. #define    CLER_X1        (CLER_X-4)
  34. #define    CLER_Y1        (CLER_Y-2)
  35. #define    CLER_X2        (CLER_X+14*8+3)
  36. #define    CLER_Y2        (CLER_Y+17)
  37.  
  38. #define LIST_X      (17*8)
  39. #define LIST_Y      26
  40. #define    LIST_X1        (LIST_X-4)
  41. #define    LIST_Y1        (LIST_Y-2)
  42. #define    LIST_X2        (LIST_X+14*8+3)
  43. #define    LIST_Y2        (LIST_Y+17)
  44.  
  45. #define PRNT_X      (33*8)
  46. #define PRNT_Y      26
  47. #define    PRNT_X1        (PRNT_X-4)
  48. #define    PRNT_Y1        (PRNT_Y-2)
  49. #define    PRNT_X2        (PRNT_X+14*8+3)
  50. #define    PRNT_Y2        (PRNT_Y+17)
  51.  
  52. #define INST_X      (49*8)
  53. #define INST_Y      26
  54. #define    INST_X1        (INST_X-4)
  55. #define    INST_Y1        (INST_Y-2)
  56. #define    INST_X2        (INST_X+14*8+3)
  57. #define    INST_Y2        (INST_Y+17)
  58.  
  59. #define EXIT_X      (65*8)
  60. #define EXIT_Y      26
  61. #define    EXIT_X1        (EXIT_X-4)
  62. #define    EXIT_Y1        (EXIT_Y-2)
  63. #define    EXIT_X2        (EXIT_X+14*8+3)
  64. #define    EXIT_Y2        (EXIT_Y+17)
  65.  
  66. #define KEY_X        8
  67. #define KEY_Y        69
  68. #define KEY_L        (18*8)
  69. #define KEY_S        (20*8)
  70. #define KEY_POS_X(n)    ((n%4)*KEY_S+KEY_X)
  71. #define KEY_POS_Y(n)    ((n/4)*23+KEY_Y)
  72.  
  73. #define    PRG_NAME_X    8
  74. #define    PRG_MAKE_X    (47*8)
  75. #define    PRG_BITS_X    (71*8)
  76. #define    PRG_NAME_L    (44*8+6)
  77. #define    PRG_MAKE_L    (31*8+6)
  78. #define    PRG_BITS_L    (8*8)
  79. #define    PRG_Y            252
  80. #define PRG_POS_Y(n)    ((n)*23+PRG_Y)
  81.  
  82. #define    MSG2_X        (1*8)
  83. #define    MSG2_Y        460
  84.  
  85. #define    BACK_X        (29*8)
  86. #define    BACK_Y        460
  87. #define    BACK_X1        (BACK_X-4)
  88. #define    BACK_Y1        (BACK_Y-2)
  89. #define    BACK_X2        (BACK_X+8*8+3)
  90. #define    BACK_Y2        (BACK_Y+17)
  91.  
  92. #define    NEXT_X        (39*8)
  93. #define    NEXT_Y        460
  94. #define    NEXT_X1        (NEXT_X-4)
  95. #define    NEXT_Y1        (NEXT_Y-2)
  96. #define    NEXT_X2        (NEXT_X+8*8+3)
  97. #define    NEXT_Y2        (NEXT_Y+17)
  98.  
  99. #define    TITL_X1        (18 * 8)
  100. #define    TITL_Y1        232
  101. #define    TITL_X2        (TITL_X1 + 8 * 8)
  102. #define    TITL_Y2        (TITL_Y1 + 15)
  103.  
  104. #define    WRIT_X1        (59 * 8)
  105. #define    WRIT_Y1        232
  106. #define    WRIT_X2        (WRIT_X1 + 8 * 8)
  107. #define    WRIT_Y2        (WRIT_Y1 + 15)
  108.  
  109. static    int    sw_flg[16];
  110. static    char    *sw_img[16];
  111.  
  112. int    MOS_stei(int x1, int y1, int x2, int y2, int rp)
  113. {
  114.     int stat=0;
  115.     int cl, sw, x, y;
  116.     int tk;
  117.  
  118.     for ( ; ; ) {
  119.     MOS_rdpos(&sw,&x,&y);
  120.     if ( x >= x1 && x <= x2 && y >= y1 && y <= y2 )
  121.         cl = 1;
  122.     else
  123.         cl = 0;
  124.  
  125.     switch(stat) {
  126.     case 0:
  127.         if ( cl == 0 || sw == 0 )
  128.         return 0;
  129.         MOS_disp(OFF);
  130.         DSP_box(x1,y1,x2,y2,8,M_XOR);
  131.         MOS_disp(ON);
  132.         stat = 1;
  133.         tk = tick_timer + 50;
  134.         break;
  135.  
  136.     case 1:
  137.         if ( sw == 0 || cl == 0 ) {
  138.         MOS_disp(OFF);
  139.         DSP_box(x1,y1,x2,y2,8,M_XOR);
  140.         MOS_disp(ON);
  141.             if ( sw == 0 && cl != 0 )
  142.             return 1;
  143.         else
  144.             return 0;
  145.  
  146.         } else if ( rp != 0 && tk <= tick_timer &&
  147.             sw != 0 && cl != 0 ) {
  148.         MOS_disp(OFF);
  149.         DSP_box(x1,y1,x2,y2,8,M_XOR);
  150.         MOS_disp(ON);
  151.         return 1;
  152.         }
  153.         break;
  154.     }
  155.     }
  156. }
  157. int    MENU_no(int rc)
  158. {
  159.     int     i,sw,x,y;
  160.     static struct {
  161.     int    x1,y1,x2,y2;
  162.     int    no;
  163.     int    *sw;
  164.     int    rp;
  165.     } event_tbl[]={
  166.     { CLER_X1,CLER_Y1,CLER_X2,CLER_Y2,CLER_NO,&sw_flg[0],0 },
  167.     { LIST_X1,LIST_Y1,LIST_X2,LIST_Y2,LIST_NO,&sw_flg[1],0 },
  168.     { PRNT_X1,PRNT_Y1,PRNT_X2,PRNT_Y2,PRNT_NO,&sw_flg[2],0 },
  169.     { INST_X1,INST_Y1,INST_X2,INST_Y2,INST_NO,&sw_flg[3],0 },
  170.     { EXIT_X1,EXIT_Y1,EXIT_X2,EXIT_Y2,EXIT_NO,&sw_flg[4],0 },
  171.     { BACK_X1,BACK_Y1,BACK_X2,BACK_Y2,BACK_NO,&sw_flg[5],1 },
  172.     { NEXT_X1,NEXT_Y1,NEXT_X2,NEXT_Y2,NEXT_NO,&sw_flg[6],1 },
  173.     { 0,0,0,0,NON_NO }
  174.     };
  175.  
  176.     MOS_rdpos(&sw,&x,&y);
  177.     if ( sw == 0 )
  178.     return NON_NO;
  179.  
  180.     for ( i = 0 ; event_tbl[i].no != NON_NO ; i++ ) {
  181.     if ( *event_tbl[i].sw != 0 &&
  182.          MOS_stei(event_tbl[i].x1,event_tbl[i].y1,
  183.               event_tbl[i].x2,event_tbl[i].y2,
  184.               event_tbl[i].rp) != 0 )
  185.         return event_tbl[i].no;
  186.     }
  187.  
  188.     if ( rc == 0 )
  189.     return NON_NO;
  190.  
  191.     if ( MOS_stei(TITL_X1, TITL_Y1, TITL_X2, TITL_Y2, 0) != 0 )
  192.     return TITL_NO;
  193.  
  194.     if ( MOS_stei(WRIT_X1, WRIT_Y1, WRIT_X2, WRIT_Y2, 0) != 0 )
  195.     return WRIT_NO;
  196.  
  197.     for ( i = 0 ; i < 28 ; i++ ) {
  198.     if ( MOS_stei(KEY_POS_X(i) - 4, KEY_POS_Y(i) - 2,
  199.         KEY_POS_X(i) + KEY_L + 3, KEY_POS_Y(i) + 17, 0) != 0 )
  200. /*******************************************
  201.     if ( x >= (KEY_POS_X(i)-4) && y >= (KEY_POS_Y(i)-2) &&
  202.          x <= (KEY_POS_X(i)+KEY_L+3) && y <= (KEY_POS_Y(i)+17) )
  203. ********************************************/
  204.         return (KEY_NO + i);
  205.     }
  206.  
  207.     for ( i = 0 ; i < 9 ; i++ ) {
  208.     if ( prg_tbl[i] != NULL &&
  209.          ( MOS_stei(PRG_NAME_X-4,PRG_POS_Y(i)-2,
  210.                   PRG_NAME_X+PRG_NAME_L+3,PRG_POS_Y(i)+17,0) != 0 ||
  211.            MOS_stei(PRG_MAKE_X-4,PRG_POS_Y(i)-2,
  212.                   PRG_MAKE_X+PRG_MAKE_L+3,PRG_POS_Y(i)+17,0) != 0 ) )
  213. /**********************************************************************
  214.            MOS_stei(PRG_BITS_X-4,PRG_POS_Y(i)-2,
  215.                   PRG_BITS_X+PRG_BITS_L+3,PRG_POS_Y(i)+17,0) != 0 ) )
  216. ***********************************************************************/
  217.         return (PRG_NO+i);
  218.     }
  219.  
  220.     return NON_NO;
  221. }
  222. void    KEY_disp(int no)
  223. {
  224.     MOS_disp(OFF);
  225.     DSP_box(KEY_POS_X(no)-4,KEY_POS_Y(no)-2,
  226.         KEY_POS_X(no)+KEY_L+3,KEY_POS_Y(no)+17,
  227.         8,M_XOR);
  228.     MOS_disp(ON);
  229. }
  230. void    KEY_putstr(int no,char *key)
  231. {
  232.     MOS_disp(OFF);
  233.     gprintf(KEY_POS_X(no),KEY_POS_Y(no),CHR_COL,KEY_COL,"%-18.18s",key);
  234.     MOS_disp(ON);
  235. }
  236. void    PRG_disp(int no,char *prog,char *make,int bits)
  237. {
  238.     MOS_disp(OFF);
  239.     gprintf(PRG_NAME_X,PRG_POS_Y(no),CHR_COL,PRG_COL,"%-44.44s",prog);
  240.     gprintf(PRG_MAKE_X,PRG_POS_Y(no),CHR_COL,PRG_COL,"%-31.31s",make);
  241. /*****************************************************************
  242.     gprintf(PRG_BITS_X,PRG_POS_Y(no),ACT_COL,PRG_COL,"%s%s%s%s",
  243.     (bits & 1) ? "☆":"  ",
  244.     (bits & 2) ? "☆":"  ",
  245.     (bits & 4) ? "☆":"  ",
  246.     (bits & 8) ? "☆":"  ");
  247. ********************************************************************/
  248.     MOS_disp(ON);
  249. }
  250. void    MSG_disp(char *form,...)
  251. {
  252.     va_list arg;
  253.     char    tmp[256];
  254.  
  255.     va_start(arg,form);
  256.     vsprintf((char *)tmp,form,arg);
  257.     MOS_disp(OFF);
  258.     gputs(MSG_X,MSG_Y,CHR_COL,MENU_COL,tmp);
  259.     MOS_disp(ON);
  260.     va_end(arg);
  261. }
  262. void    MSG2_disp(char *form,...)
  263. {
  264.     va_list arg;
  265.     char    tmp[256];
  266.  
  267.     va_start(arg,form);
  268.     vsprintf((char *)tmp,form,arg);
  269.     MOS_disp(OFF);
  270.     gputs(MSG2_X,MSG2_Y,CHR_COL,PRG_COL,tmp);
  271.     MOS_disp(ON);
  272.     va_end(arg);
  273. }
  274. /***********************************************
  275. void    MENU_mask(int no,int sw)
  276. {
  277.     static struct {
  278.     int    x,y;
  279.     int    back;
  280.     char    *str;
  281.     int    *sw;
  282.     } menu_tbl[]={
  283.     { CLER_X,CLER_Y,MENU_COL,"    CANCEL    ",&sw_flg[0] },
  284.     { LIST_X,LIST_Y,MENU_COL,"     LOOK     ",&sw_flg[1] },
  285.     { PRNT_X,PRNT_Y,MENU_COL,"    PRINT     ",&sw_flg[2] },
  286.     { INST_X,INST_Y,MENU_COL,"   INSTALL    ",&sw_flg[3] },
  287.     { EXIT_X,EXIT_Y,MENU_COL,"     EXIT     ",&sw_flg[4] },
  288.     { BACK_X,BACK_Y,PRG_COL, "  BACK  "      ,&sw_flg[5] },
  289.     { NEXT_X,NEXT_Y,PRG_COL, "  NEXT  "      ,&sw_flg[6] },
  290.     { CLER_X,CLER_Y,MENU_COL,"    CANCEL    ",&sw_flg[0] },
  291.     { LIST_X,LIST_Y,MENU_COL,"     LOOK     ",&sw_flg[1] },
  292.     };
  293.  
  294.     MOS_disp(OFF);
  295.     gputs(menu_tbl[no].x,menu_tbl[no].y,
  296.     sw == ON ? CHR_COL:XCHR_COL, menu_tbl[no].back,
  297.     menu_tbl[no].str);
  298.     MOS_disp(ON);
  299.     *menu_tbl[no].sw = sw;
  300. }
  301. *********************************************************/
  302. void    MENU_mask(int no,int sw)
  303. {
  304.     static struct {
  305.     int    x,y;
  306.     int    back;
  307.     char    *str;
  308.     int    sw;
  309.     } menu_tbl[]={
  310.     { CLER_X+28,CLER_Y+3,MENU_COL,cancel_img, 0 },
  311.     { LIST_X+36,LIST_Y+3,MENU_COL,look_img,   1 },
  312.     { PRNT_X+34,PRNT_Y+3,MENU_COL,print_img,  2 },
  313.     { INST_X+28,INST_Y+3,MENU_COL,install_img,3 },
  314.     { EXIT_X+38,EXIT_Y+3,MENU_COL,exit_img,   4 },
  315.     { BACK_X+14,BACK_Y+3,PRG_COL, back_img,   5 },
  316.     { NEXT_X+14,NEXT_Y+3,PRG_COL, next_img,   6 },
  317.     { CLER_X+28,CLER_Y+3,MENU_COL,cancel_img, 0 },
  318.     { LIST_X+36,LIST_Y+3,MENU_COL,look_img,   1 },
  319.     { EXIT_X+38,EXIT_Y+3,MENU_COL,exec_img,   4 },
  320.     };
  321.  
  322.     MOS_disp(OFF);
  323.     if ( sw_img[menu_tbl[no].sw] != NULL &&
  324.      sw_img[menu_tbl[no].sw] != menu_tbl[no].str )
  325.     DSP_strcls(sw_img[menu_tbl[no].sw],
  326.         menu_tbl[no].x,menu_tbl[no].y,
  327.         menu_tbl[no].back, M_PSET);
  328.     DSP_strimg(menu_tbl[no].str,
  329.     menu_tbl[no].x,menu_tbl[no].y,
  330.     (sw == ON ? XCHR_COL:CHR_COL), menu_tbl[no].back, M_PSET);
  331.     MOS_disp(ON);
  332.     sw_flg[menu_tbl[no].sw] = sw;
  333.     sw_img[menu_tbl[no].sw] = menu_tbl[no].str;
  334. }
  335. void    SCRN_init(void)
  336. {
  337.     int     i;
  338.  
  339.     MOS_disp(OFF);
  340.     DSP_rbox(0,0,639,47,LINE_COL,MENU_COL,M_PSET);    /* Main Menu Back */
  341.     DSP_rbox(0,47,639,230,LINE_COL,KEY_COL,M_PSET);    /* KeyWord Menu Back */
  342.     DSP_rbox(0,230,639,479,LINE_COL,PRG_COL,M_PSET);    /* Prog Menu Back */
  343.  
  344.     DSP_wbox(CLER_X1,CLER_Y1,CLER_X2,CLER_Y2,LINE_COL,MENU_COL,M_PSET);
  345.     DSP_wbox(LIST_X1,LIST_Y1,LIST_X2,LIST_Y2,LINE_COL,MENU_COL,M_PSET);
  346.     DSP_wbox(PRNT_X1,PRNT_Y1,PRNT_X2,PRNT_Y2,LINE_COL,MENU_COL,M_PSET);
  347.     DSP_wbox(INST_X1,INST_Y1,INST_X2,INST_Y2,LINE_COL,MENU_COL,M_PSET);
  348.     DSP_wbox(EXIT_X1,EXIT_Y1,EXIT_X2,EXIT_Y2,LINE_COL,MENU_COL,M_PSET);
  349.  
  350.     DSP_wbox(BACK_X1,BACK_Y1,BACK_X2,BACK_Y2,LINE_COL,PRG_COL,M_PSET);
  351.     DSP_wbox(NEXT_X1,NEXT_Y1,NEXT_X2,NEXT_Y2,LINE_COL,PRG_COL,M_PSET);
  352.  
  353.     for ( i = 0 ; i < 28 ; i++ ) {
  354.     DSP_wbox(KEY_POS_X(i)-4,KEY_POS_Y(i)-2,
  355.          KEY_POS_X(i)+KEY_L+3,KEY_POS_Y(i)+17,
  356.          LINE_COL,KEY_COL,M_PSET);
  357.     }
  358.     for ( i = 0 ; i < 9 ; i++ ) {
  359.     DSP_wbox(PRG_NAME_X-4,PRG_POS_Y(i)-2,
  360.          PRG_NAME_X+PRG_NAME_L+3,PRG_POS_Y(i)+17,
  361.          LINE_COL,PRG_COL,M_PSET);
  362.     DSP_wbox(PRG_MAKE_X-4,PRG_POS_Y(i)-2,
  363.          PRG_MAKE_X+PRG_MAKE_L+3,PRG_POS_Y(i)+17,
  364.          LINE_COL,PRG_COL,M_PSET);
  365. /**********************************************************
  366.     DSP_wbox(PRG_BITS_X-4,PRG_POS_Y(i)-2,
  367.          PRG_BITS_X+PRG_BITS_L+3,PRG_POS_Y(i)+17,
  368.          LINE_COL,PRG_COL,M_PSET);
  369. ***********************************************************/
  370.     }
  371.  
  372. /********
  373.     DSP_msg("Free Software Collection Helper",
  374.         8,4,5,ERR_COL,MENU_COL,M_PSET);
  375.     gputs((35*8),50,CHR_COL,KEY_COL,"MEMU SELECT");
  376.     gputs((16*8),232,CHR_COL,PRG_COL,"TITLE");
  377.     gputs((57*8),232,CHR_COL,PRG_COL,"WRITER");
  378. *********/
  379.  
  380.     DSP_strimg(helper_img,
  381.         8, 6, ERR_COL, MENU_COL, M_PSET);
  382.     DSP_strimg(menu_img,
  383.         35 * 8, 53, CHR_COL, KEY_COL, M_PSET);
  384.  
  385.     DSP_strimg(title_img,
  386.         20 * 8, 235, CHR_COL, PRG_COL, M_PSET);
  387.     DSP_strimg(writer_img,
  388.         60 * 8, 235, CHR_COL, PRG_COL, M_PSET);
  389.  
  390. /******************************************
  391.     gputs((71*8),242,XPRG_COL,PRG_COL,"TMBD");
  392. *******************************************/
  393.     MOS_disp(ON);
  394.  
  395.     MENU_mask(CLER_NO,OFF);
  396.     MENU_mask(LIST_NO,OFF);
  397.     MENU_mask(PRNT_NO,OFF);
  398.     MENU_mask(INST_NO,OFF);
  399.     MENU_mask(EXIT_NO,OFF);
  400.     MENU_mask(BACK_NO,OFF);
  401.     MENU_mask(NEXT_NO,OFF);
  402. }
  403.